home *** CD-ROM | disk | FTP | other *** search
/ Apple WWDC 1996 / WWDC96_1996 (CD).toast / Technology Materials / QuickTime VR / MacOS / QuickDraw™ 3D 1.0.6F4 SDK / Development / 3DMF parser / 1.0 version / MF3DPC / MFSUBOBJ.H < prev    next >
Encoding:
C/C++ Source or Header  |  1995-11-07  |  16.7 KB  |  488 lines  |  [TEXT/dosa]

  1. #ifndef MF3DSUBOBJECTS_H
  2. #define    MF3DSUBOBJECTS_H
  3. /*==============================================================================
  4.  *
  5.  *    File:        MFSUBOBJ.H
  6.  *
  7.  *    Function:    Structure definitions for Metafile subobjects.
  8.  *
  9.  *    Version:    Metafile:    Version 1.0 3DMF files
  10.  *                Package:    Release #2 of this code
  11.  *
  12.  *    Author(s):    Rick Wong (RWW), Duet Development Corp.
  13.  *                John Kelly (JRK), Duet Development Corp.
  14.  *
  15.  *    Copyright:    (c) 1995 by Apple Computer, Inc., all rights reserved.
  16.  *
  17.  *    Change History (most recent first):
  18.  *        FB7_JRK    Pragma macros
  19.  *        Fabio    Changed file name to 8 characters
  20.  *        F3A_RWW    MeshEdges and OrientationStyle.
  21.  *        F2R_RWW    No more complex objects.
  22.  *        F27_RWW    File created.
  23.  *==============================================================================
  24.  */
  25. #if defined(applec) || defined(__MWERKS__) || defined(THINK_C)
  26. #pragma once
  27. #endif
  28.  
  29. #include "MFTYPES.H"
  30.  
  31. /*******************************************************************************
  32.  *    Attributes
  33.  *******************************************************************************
  34.  */
  35. /*==============================================================================
  36.  *    AttributeSet
  37.  *==============================================================================
  38.  */
  39. #define    kMF3DObjAttributeSet                    MF3DObjectType('a','t','t','r')
  40. #define    kMF3DObjAttributeSetText                "AttributeSet"
  41.  
  42. typedef struct MF3DAttributeSetObj
  43. {    MF3DObjHeader
  44. } MF3DAttributeSetObj, *MF3DAttributeSetObjPtr;
  45.  
  46. /*==============================================================================
  47.  *    AmbientCoefficient
  48.  *
  49.  *    0 Û ambientCoefficient Û 1.0
  50.  *==============================================================================
  51.  */
  52. #define    kMF3DObjAmbientCoefficient                MF3DObjectType('c','a','m','b')
  53. #define    kMF3DObjAmbientCoefficientText            "AmbientCoefficient"
  54.  
  55. typedef struct MF3DAmbientCoefficientObj
  56. {    MF3DObjHeader
  57.     MF3DFloat32            ambientCoefficent;
  58. } MF3DAmbientCoefficientObj, *MF3DAmbientCoefficientObjPtr;
  59.  
  60. /*==============================================================================
  61.  *    DiffuseColor
  62.  *==============================================================================
  63.  */
  64. #define    kMF3DObjDiffuseColor                    MF3DObjectType('k','d','i','f')
  65. #define    kMF3DObjDiffuseColorText                "DiffuseColor"
  66.  
  67. typedef struct MF3DDiffuseColorObj
  68. {    MF3DObjHeader
  69.     MF3DRGBColor            diffuseColor;
  70. } MF3DDiffuseColorObj, *MF3DDiffuseColorObjPtr;
  71.  
  72. /*==============================================================================
  73.  *    HighlightState
  74.  *==============================================================================
  75.  */
  76. #define    kMF3DObjHighlightState                    MF3DObjectType('h','l','s','t')
  77. #define    kMF3DObjHighlightStateText                "HighlightState"
  78.  
  79. #define    kDefaultHighlightState    kMF3DBooleanFalse
  80.  
  81. typedef struct MF3DHighlightStateObj
  82. {    MF3DObjHeader
  83.     MF3DBoolean                highlighted;
  84. } MF3DHighlightStateObj, *MF3DHighlightStateObjPtr;
  85.  
  86. /*==============================================================================
  87.  *    Normal
  88.  *
  89.  *    |normal| = 1
  90.  *==============================================================================
  91.  */
  92. #define    kMF3DObjNormal                            MF3DObjectType('n','r','m','l')
  93. #define    kMF3DObjNormalText                        "Normal"
  94.  
  95. typedef struct MF3DNormalObj
  96. {    MF3DObjHeader
  97.     MF3DVector3D            normal;
  98. } MF3DNormalObj, *MF3DNormalObjPtr;
  99.  
  100. /*==============================================================================
  101.  *    ShadingUV
  102.  *
  103.  *    Any UV parametrization is allowed,
  104.  *    however, shading generally occurs with the following values. 
  105.  *        0 <= shadingUV.u <= 1
  106.  *        0 <= shadingUV.v <= 1
  107.  *==============================================================================
  108.  */
  109. #define    kMF3DObjShadingUV                        MF3DObjectType('s','h','u','v')
  110. #define    kMF3DObjShadingUVText                    "ShadingUV"
  111.  
  112. typedef struct MF3DShadingUVObj
  113. {    MF3DObjHeader
  114.     MF3DParam2D                shadingUV;
  115. } MF3DShadingUVObj, *MF3DShadingUVObjPtr;
  116.  
  117. /*==============================================================================
  118.  *    SpecularColor
  119.  *==============================================================================
  120.  */
  121. #define    kMF3DObjSpecularColor                    MF3DObjectType('k','s','p','c')
  122. #define    kMF3DObjSpecularColorText                "SpecularColor"
  123.  
  124. typedef struct MF3DSpecularColorObj
  125. {    MF3DObjHeader
  126.     MF3DRGBColor            specularColor;
  127. } MF3DSpecularColorObj, *MF3DSpecularColorObjPtr;
  128.  
  129. /*==============================================================================
  130.  *    SpecularControl
  131.  *
  132.  *    0 <= specularControl
  133.  *==============================================================================
  134.  */
  135. #define    kMF3DObjSpecularControl                    MF3DObjectType('c','s','p','c')
  136. #define    kMF3DObjSpecularControlText                "SpecularControl"
  137.  
  138. typedef struct MF3DSpecularControlObj
  139. {    MF3DObjHeader
  140.     MF3DFloat32                specularControl;
  141. } MF3DSpecularControlObj, *MF3DSpecularControlObjPtr;
  142.  
  143. /*==============================================================================
  144.  *    SurfaceTangent
  145.  *==============================================================================
  146.  */
  147. #define    kMF3DObjSurfaceTangent                    MF3DObjectType('s','r','t','n')
  148. #define    kMF3DObjSurfaceTangentText                "SurfaceTangent"
  149.  
  150. typedef struct MF3DSurfaceTangentObj
  151. {    MF3DObjHeader
  152.     MF3DVector3D            paramU;
  153.     MF3DVector3D            paramV;
  154. } MF3DSurfaceTangentObj, *MF3DSurfaceTangentObjPtr;
  155.  
  156. /*==============================================================================
  157.  *    SurfaceUV
  158.  *
  159.  *    Any UV parametrization is allowed,
  160.  *    however, shading generally occurs with the following values. 
  161.  *        0 <= shadingUV.u <= 1
  162.  *        0 <= shadingUV.v <= 1
  163.  *==============================================================================
  164.  */
  165. #define    kMF3DObjSurfaceUV                        MF3DObjectType('s','r','u','v')
  166. #define    kMF3DObjSurfaceUVText                    "SurfaceUV"
  167.  
  168. typedef struct MF3DSurfaceUVObj
  169. {    MF3DObjHeader
  170.     MF3DParam2D                surfaceUV;
  171. } MF3DSurfaceUVObj, *MF3DSurfaceUVObjPtr;
  172.  
  173. /*==============================================================================
  174.  *    SurfaceShader
  175.  *==============================================================================
  176.  */
  177. #define    kDefaultSurfaceShader    NULL
  178.  
  179. /*==============================================================================
  180.  *    TransparencyColor
  181.  *==============================================================================
  182.  */
  183. #define    kMF3DObjTransparencyColor                MF3DObjectType('k','x','p','r')
  184. #define    kMF3DObjTransparencyColorText            "TransparencyColor"
  185.  
  186. typedef struct MF3DTransparencyColorObj
  187. {    MF3DObjHeader
  188.     MF3DRGBColor            transparency;
  189. } MF3DTransparencyColorObj, *MF3DTransparencyColorObjPtr;
  190.  
  191. /*******************************************************************************
  192.  *    Camera attributes:    CameraPlacement, CameraRange, CameraViewPort
  193.  *
  194.  *    For:
  195.  *        OrthographicCamera
  196.  *        ViewAngleAspectCamera
  197.  *        ViewPlaneCamera
  198.  *******************************************************************************
  199.  */
  200. /*==============================================================================
  201.  *    CameraPlacement
  202.  *
  203.  *    upVector ^ (pointOfInterest - location)
  204.  *
  205.  *    |upVector| = 1.0
  206.  *
  207.  *    Default Values:
  208.  *        0 0 1 # location
  209.  *        0 0 0 # pointOfInterest
  210.  *        0 1 0 # upVector
  211.  *==============================================================================
  212.  */
  213. #define    kMF3DObjCameraPlacement                    MF3DObjectType('c','m','p','l')
  214. #define    kMF3DObjCameraPlacementText                "CameraPlacement"
  215.  
  216. typedef struct MF3DCameraPlacementObj
  217. {    MF3DObjHeader
  218.     MF3DPoint3D            location;
  219.     MF3DPoint3D            pointOfInterest;
  220.     MF3DVector3D        upVector;
  221. } MF3DCameraPlacementObj, *MF3DCameraPlacementObjPtr;
  222.  
  223. /*==============================================================================
  224.  *    CameraRange
  225.  *
  226.  *    0 < hither <= yon
  227.  *    default is:
  228.  *        hither  epsilon
  229.  *        yon     infinity
  230.  *==============================================================================
  231.  */
  232. #define    kMF3DObjCameraRange                        MF3DObjectType('c','m','r','g')
  233. #define    kMF3DObjCameraRangeText                    "CameraRange"
  234.  
  235. typedef struct MF3DCameraRangeObj
  236. {    MF3DObjHeader
  237.     MF3DFloat32            hither;
  238.     MF3DFloat32            yon;
  239. } MF3DCameraRangeObj, *MF3DCameraRangeObjPtr;
  240.  
  241. /*==============================================================================
  242.  *    CameraViewPort
  243.  *
  244.  *    -1 <= origin.x <= 1
  245.  *    -1 <= origin.y <= 1
  246.  *    0 < width <= 2
  247.  *    0 < height <= 2
  248.  *    Default is:
  249.  *        -1  1  # origin
  250.  *        2      # width
  251.  *        2      # height
  252.  *==============================================================================
  253.  */
  254. #define    kMF3DObjCameraViewPort                    MF3DObjectType('c','m','v','p')
  255. #define    kMF3DObjCameraViewPortText                "CameraViewPort"
  256.  
  257. typedef struct MF3DCameraViewPortObj
  258. {    MF3DObjHeader
  259.     MF3DPoint2D            origin;
  260.     MF3DFloat32            width;
  261.     MF3DFloat32            height;
  262. } MF3DCameraViewPortObj, *MF3DCameraViewPortObjPtr;
  263.  
  264. /*==============================================================================
  265.  *    FaceAttributeSetList
  266.  *==============================================================================
  267.  */
  268. #define    kMF3DObjFaceAttributeSetList            MF3DObjectType('f','a','s','l')
  269. #define    kMF3DObjFaceAttributeSetListText        "FaceAttributeSetList"
  270.  
  271. enum MF3DPackingEnum
  272. {    MF3DPackingInclude        = 0x00000000,
  273.     MF3DPackingExclude        = 0x00000001
  274. };
  275. typedef    MF3DEnumData    MF3DPackingEnum;
  276.  
  277. typedef    struct MF3DFaceAttributeSetListObj
  278. {    MF3DObjHeader
  279.     MF3DUns32            nObjects;
  280.     MF3DPackingEnum        packing;
  281.     MF3DUns32            nIndices;
  282.     MF3DUns32Ptr        indices;                /* size: nIndices            */
  283. } MF3DFaceAttributeSetListObj, *MF3DFaceAttributeSetListObjPtr;
  284.  
  285. /*==============================================================================
  286.  *    GeometryAttributeSetList
  287.  *==============================================================================
  288.  */
  289. #define    kMF3DObjGeometryAttributeSetList        MF3DObjectType('g','a','s','l')
  290. #define    kMF3DObjGeometryAttributeSetListText    "GeometryAttributeSetList"
  291.  
  292. typedef    struct MF3DGeometryAttributeSetListObj
  293. {    MF3DObjHeader
  294.     MF3DUns32            nObjects;
  295.     MF3DPackingEnum        packing;
  296.     MF3DUns32            nIndices;
  297.     MF3DUns32Ptr        indices;                /* size: nIndices            */
  298. } MF3DGeometryAttributeSetListObj, *MF3DGeometryAttributeSetListObjPtr;
  299.  
  300. /*==============================================================================
  301.  *    VertexAttributeSetList
  302.  *==============================================================================
  303.  */
  304. #define    kMF3DObjVertexAttributeSetList            MF3DObjectType('v','a','s','l')
  305. #define    kMF3DObjVertexAttributeSetListText        "VertexAttributeSetList"
  306.  
  307. typedef    struct MF3DVertexAttributeSetListObj
  308. {    MF3DObjHeader
  309.     MF3DUns32            nObjects;
  310.     MF3DPackingEnum        packing;
  311.     MF3DUns32            nIndices;
  312.     MF3DUns32Ptr        indices;                /* size: nIndices            */
  313. } MF3DVertexAttributeSetListObj, *MF3DVertexAttributeSetListObjPtr;
  314.  
  315. /*==============================================================================
  316.  *    BottomCapAttributeSet
  317.  *==============================================================================
  318.  */
  319. #define    kMF3DObjBottomCapAttributeSet            MF3DObjectType('b','c','a','s')
  320. #define    kMF3DObjBottomCapAttributeSetText        "BottomCapAttributeSet"
  321.  
  322. typedef struct MF3DBottomCapAttributeSetObj
  323. {    MF3DObjHeader
  324. } MF3DBottomCapAttributeSetObj, *MF3DBottomCapAttributeSetObjPtr;
  325.  
  326. /*==============================================================================
  327.  *    Caps
  328.  *==============================================================================
  329.  */
  330. #define    kMF3DObjCaps                            MF3DObjectType('c','a','p','s')
  331. #define    kMF3DObjCapsText                        "Caps"
  332.  
  333. enum MF3DCapsFlags
  334. {    kCapsNone        =    0x00000000,
  335.     kCapsBottom        =    0x00000001,
  336.     kCapsTop        =    0x00000002,
  337.     kCapsDefault    =    kCapsNone
  338. };
  339. typedef    MF3DFlagData    MF3DCapsFlags;
  340.  
  341. typedef struct MF3DCapsObj
  342. {    MF3DObjHeader
  343.     MF3DCapsFlags        caps;
  344. } MF3DCapsObj, *MF3DCapsObjPtr;
  345.  
  346. /*==============================================================================
  347.  *    FaceCapAttributeSet
  348.  *==============================================================================
  349.  */
  350. #define    kMF3DObjFaceCapAttributeSet                MF3DObjectType('f','c','a','s')
  351. #define    kMF3DObjFaceCapAttributeSetText            "FaceCapAttributeSet"
  352.  
  353. typedef struct MF3DFaceCapAttributeSetObj
  354. {    MF3DObjHeader
  355. } MF3DFaceCapAttributeSetObj, *MF3DFaceCapAttributeSetObjPtr;
  356.  
  357. /*==============================================================================
  358.  *    TopCapAttributeSet
  359.  *==============================================================================
  360.  */
  361. #define    kMF3DObjTopCapAttributeSet                MF3DObjectType('t','c','a','s')
  362. #define    kMF3DObjTopCapAttributeSetText            "TopCapAttributeSet"
  363.  
  364. typedef struct MF3DTopCapAttributeSetObj
  365. {    MF3DObjHeader
  366. } MF3DTopCapAttributeSetObj, *MF3DTopCapAttributeSetObjPtr;
  367.  
  368. /*==============================================================================
  369.  *    DisplayGroupState
  370.  *==============================================================================
  371.  */
  372. #define    kMF3DObjDisplayGroupState                MF3DObjectType('d','g','s','t')
  373. #define    kMF3DObjDisplayGroupStateText            "DisplayGroupState"
  374.  
  375. enum MF3DDisplayGroupStateFlags
  376. {    MF3DDisplayGroupNone                = 0x00000000,
  377.     MF3DDisplayGroupInline                = 0x00000001,
  378.     MF3DDisplayGroupDoNotDraw            = 0x00000002,
  379.     MF3DDisplayGroupNoBoundingBox        = 0x00000004,
  380.     MF3DDisplayGroupNoBoundingSphere    = 0x00000008,
  381.     MF3DDisplayGroupDoNotPick            = 0x00000010,
  382.     MF3DDisplayGroupDefaultFlags        = MF3DDisplayGroupNone
  383. };
  384. typedef MF3DFlagData    MF3DDisplayGroupStateFlags;
  385.  
  386. typedef struct MF3DDisplayGroupStateObj
  387. {    MF3DObjHeader
  388.     MF3DDisplayGroupStateFlags    traversalFlags;
  389. } MF3DDisplayGroupStateObj, *MF3DDisplayGroupStateObjPtr;
  390.  
  391. /*==============================================================================
  392.  *    MeshCorners
  393.  *==============================================================================
  394.  */
  395. #define    kMF3DObjMeshCorners                        MF3DObjectType('c','r','n','r')
  396. #define    kMF3DObjMeshCornersText                    "MeshCorners"
  397.  
  398. typedef struct MF3DMeshCorner
  399. {    MF3DUns32                vertexIndex;
  400.     MF3DUns32                nFaces;                /* 0 < nFaces                */
  401.     MF3DUns32Ptr            faces;                /* size: nFaces                */
  402. } MF3DMeshCorner, *MF3DMeshCornerPtr;
  403.  
  404. typedef struct MF3DMeshCornersObj
  405. {    MF3DObjHeader
  406.     MF3DUns32                nCorners;            /* 0 < nCorners                */
  407.     MF3DMeshCornerPtr        corners;            /* size: nCorners            */
  408. } MF3DMeshCornersObj, *MF3DMeshCornersObjPtr;
  409.  
  410. /*==============================================================================
  411.  *    MeshEdges
  412.  *==============================================================================
  413.  */
  414. #define    kMF3DObjMeshEdges                        MF3DObjectType('e','d','g','e')
  415. #define    kMF3DObjMeshEdgesText                    "MeshEdges"
  416.  
  417. typedef struct MF3DMeshEdge
  418. {    MF3DUns32                vertexIndex1;
  419.     MF3DUns32                vertexIndex2;
  420. } MF3DMeshEdge, *MF3DMeshEdgePtr;
  421.  
  422. typedef struct MF3DMeshEdgesObj
  423. {    MF3DObjHeader
  424.     MF3DUns32                nEdges;                /* 0 < nEdges                */
  425.     MF3DMeshEdgePtr            edges;                /* size: nEdges                */
  426. } MF3DMeshEdgesObj, *MF3DMeshEdgesObjPtr;
  427.  
  428. /*==============================================================================
  429.  *    ShaderData
  430.  *==============================================================================
  431.  */
  432. #define    kMF3DObjShaderData                        MF3DObjectType('s','h','d','r')
  433. #define    kMF3DObjShaderDataText                    "ShaderData"
  434.  
  435. enum MF3DShaderUVBoundaryEnum
  436. {    MF3DShaderUVBoundaryWrap    = 0x00000000,
  437.     MF3DShaderUVBoundaryClamp    = 0x00000001,
  438.     MF3DShaderUVBoundaryDefault    = MF3DShaderUVBoundaryWrap
  439. };
  440. typedef    MF3DEnumData    MF3DShaderUVBoundaryEnum;
  441.  
  442. typedef struct MF3DShaderDataObj
  443. {    MF3DObjHeader
  444.     MF3DShaderUVBoundaryEnum    uBounds;
  445.     MF3DShaderUVBoundaryEnum    vBounds;
  446. } MF3DShaderDataObj, *MF3DShaderDataObjPtr;
  447.  
  448. /*==============================================================================
  449.  *    ShaderTransform
  450.  *==============================================================================
  451.  */
  452. #define    kMF3DObjShaderTransform                    MF3DObjectType('s','d','x','f')
  453. #define    kMF3DObjShaderTransformText                "ShaderTransform"
  454.  
  455. typedef struct MF3DShaderTransformObj
  456. {    MF3DObjHeader
  457.     MF3DMatrix4x4        shaderTransform;
  458. } MF3DShaderTransformObj, *MF3DShaderTransformObjPtr;
  459.  
  460. /*==============================================================================
  461.  *    ShaderUVTransform
  462.  *==============================================================================
  463.  */
  464. #define    kMF3DObjShaderUVTransform                MF3DObjectType('s','d','u','v')
  465. #define    kMF3DObjShaderUVTransformText            "ShaderUVTransform"
  466.  
  467. typedef struct MF3DShaderUVTransformObj
  468. {    MF3DObjHeader
  469.     MF3DMatrix3x3        matrix;
  470. } MF3DShaderUVTransformObj, *MF3DShaderUVTransformObjPtr;
  471.  
  472. /*==============================================================================
  473.  *    TrimCurves
  474.  *
  475.  *    Followed by:
  476.  *        MF3DVoidObjPtr                twoDCurve;                { 1-many }
  477.  *                    twoDCurve might be a MF3DNurbCurve2DObjPtr, for example
  478.  *==============================================================================
  479.  */
  480. #define    kMF3DObjTrimCurves                        MF3DObjectType('t','r','m','c')
  481. #define    kMF3DObjTrimCurvesText                    "TrimCurves"
  482.  
  483. typedef struct MF3DTrimCurvesObj
  484. {    MF3DObjHeader
  485. } MF3DTrimCurvesObj, *MF3DTrimCurvesObjPtr;
  486.  
  487. #endif
  488.